﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using SIM.Geo.BE;
using System.Linq;

namespace SIM.Geo.DA
{
    public class DAMuestraCanal : Base
    {
        #region Metodos
        /// <summary>
        /// Método devuelve lista muestra canal
        /// </summary>
        /// <returns></returns>
        public List<MuestraCanal> ListarMuestraCanal(int codigoCanal)
        {
            return this.Context.MuestraCanal.Where(x => x.CodigoCanal == codigoCanal).ToList();
        }
        /// <summary>
        /// Método devuelve lista muestra sondaje por codigo de sondaje y tipo de calidad
        /// </summary>
        /// <returns></returns>
        public List<MuestraCanal> ListarMuestraSondajePorSondajeYTipoControlCalidad(int codigoCanal, int codigoTipoControlCalidad)
        {
            return this.Context.MuestraCanal.Where(x => x.CodigoCanal == codigoCanal && x.CodigoTipoControlCalidad == codigoTipoControlCalidad).ToList();
        }
        /// <summary>
        /// Método devuelve lista muestra canal por codigo
        /// </summary>
        /// <returns></returns>
        public List<MuestraCanal> BuscarMuestraCanalPorcodigo(int codigoCanal, string codigoMuestraCanal)
        {
            return this.Context.MuestraCanal.Where(x => x.CodigoCanal == codigoCanal && x.CodigoMuestraCanal.StartsWith(codigoMuestraCanal)).ToList();
        }

        /// <summary>
        /// Método inserta una muestra canal
        /// </summary>
        /// <param name="muestraCanal"></param>
        /// <returns></returns>
        public string InsertarMuestraCanal(MuestraCanal muestraCanal)
        {
            this.Context.MuestraCanal.AddObject(muestraCanal);
            this.Context.SaveChanges();
            return muestraCanal.CodigoMuestraCanal;
        }
        /// <summary>
        /// Método modifica una muestra canal
        /// </summary>
        /// <param name="MuestraCanal"></param>
        public void ModificarMuestraCanal(MuestraCanal muestraCanal)
        {
            this.Context.MuestraCanal.Attach(muestraCanal);
            this.Context.ObjectStateManager.ChangeObjectState(muestraCanal, EntityState.Modified);
            this.Context.SaveChanges();
        }
        /// <summary>
        /// Método que elimina muestra canal
        /// </summary>
        /// <param name="MuestraCanal"></param>
        public void EliminarMuestraCanal(MuestraCanal muestraCanal)
        {
            this.Context.MuestraCanal.Attach(muestraCanal);
            this.Context.ObjectStateManager.ChangeObjectState(muestraCanal, EntityState.Deleted);
            this.Context.SaveChanges();
        }
        /// <summary>
        /// Método obtener muestra mensaje por codigo
        /// </summary>
        /// <param name="codigoMuestraMensaje"></param>
        /// <returns></returns>
        public MuestraCanal ObtenerMuestraCanal(string codigoMuestraCanal)
        {
            return this.Context.MuestraCanal.Where(x => x.CodigoMuestraCanal.Equals(codigoMuestraCanal)).FirstOrDefault();
        }

        /// <summary>
        /// Devuelve lista de Muestras por canal
        /// </summary>
        /// <param name="codigoCanal"></param>
        /// <returns></returns>
        public List<buscarMuestraCanal_Result> BuscarMuestraCanal(int codigoCanal)
        {
            return this.Context.buscarMuestraCanal(codigoCanal).ToList();
        }

        /// <summary>
        /// Método devuelve lista canal por codigos
        /// </summary>
        /// <returns></returns>
        public List<MuestraCanal> ListarMuestraCanalPorcodigos(List<string> codigoMuestraCanals)
        {
            return this.Context.MuestraCanal.Where(x => codigoMuestraCanals.Contains(x.CodigoMuestraCanal)).ToList();
        }

        /// <summary>
        /// Validar Interseccion
        /// </summary>
        /// <param name="codigoCanal"></param>
        /// <param name="tipoAnalisis"></param>
        /// <param name="desde"></param>
        /// <param name="hasta"></param>
        /// <returns></returns>
        public int ValidarInterseccionMuestraCanal(int codigoCanal, string codigoMuestraCanal, double desde, double hasta, int codigoTipoControlCalidad)
        {
            System.Data.Objects.ObjectParameter output = new System.Data.Objects.ObjectParameter("Result", 0);
            int result = (int)this.Context.validarInterseccionMuestraCanal(codigoCanal, codigoMuestraCanal, desde, hasta, codigoTipoControlCalidad, output).FirstOrDefault();
            return result;
        }

        /// <summary>
        /// Devuelve el ultimo Hasta
        /// </summary>
        /// <param name="codigoSondaje"></param>
        /// <returns></returns>
        public double ObtenerUltimoHasta(int codigoCanal)
        {
            return (double)this.Context.obtenerUltimoHastaMuestraCanal(codigoCanal).FirstOrDefault();
        }

        /// <summary>
        /// Finaliza muestras de canal
        /// </summary>
        /// <param name="codigoCanal"></param>
        /// <returns></returns>
        public string FinalizarMuestraCanal(int codigoCanal)
        {
            return this.Context.finalizarMuestraCanal(codigoCanal).FirstOrDefault();
        }
        /// <summary>
        /// Devuelve 0 = Exito, 1 = No es valida la distancia
        /// </summary>
        /// <param name="codigoSondaje"></param>
        /// <param name="hasta"></param>
        /// <param name="codigoTipoControlCalidad"></param>
        /// <returns></returns>
        public int ValidarDistanciaMuestraCanal(int codigoSondaje, double hasta, int codigoTipoControlCalidad)
        {
            System.Data.Objects.ObjectParameter output = new System.Data.Objects.ObjectParameter("Result", 0);
            return (int)this.Context.validarDistanciaMuestraCanal(codigoSondaje, hasta, codigoTipoControlCalidad, output).FirstOrDefault();
        }
        #endregion
    }
}
